/**
 * 通配符下界
 * 可以写入数据，输出只能直接输出，不可以接收
 */
class Food2{

}
class Fruit2 extends Food2{

}
class Apple2 extends Fruit2{

}
class Banana2 extends Fruit2{

}
class Message2<T>{
    private T message2;

    public T getMessage2(){
        return message2;
    }
    public void setMessage2(T message2){
        this.message2 = message2;
    }
}
public class Test2 {
    public static void main(String[] args) {
        Message2<Fruit2> message2 = new Message2<>();
        message2.setMessage2(new Fruit2());


        Message2<Food2> message21 = new Message2<>();
        message21.setMessage2(new Food2());
    }
    //temp2接收Fruit2及其子类的一个Message2
    public static void fun2(Message2<? super Fruit2> temp2){
        //此时可以修改，添加的是Fruit2或者是Fruit2的子类
        temp2.setMessage2(new Apple2());
        temp2.setMessage2(new Fruit2());

//        Fruit2 fruit2 = temp2.getMessage2(); 不能接收，因为这里无法确定是哪个父类
        System.out.println(temp2.getMessage2());//只能直接输出
    }
}
